Most computers and computing devices have one or more central processing units that execute the most basic operational units within the computer or device. Each application or process that needs to have the computer perform operations must use the central processing unit (CPU). However, a CPU can typically service only one process at a time. Accordingly, when a number of processes are running concurrently, they will compete for CPU resources, sometimes referred to as CPU bandwidth, to the exclusion of one another. The operating system of the computer is typically responsible for allocating CPU usage to various competing processes, but typically serves processes in an egalitarian fashion with no externally imposed priorities. The practical problem raised by this state of affairs is an inability to predictably and stably serve several applications using a single CPU. Thus, a machine having a single CPU cannot be reliably used to run more than a small number of well-behaved processes.
Processes can be designed to use CPU bandwidth in a “responsible” fashion, i.e. not taking all available resources, but rather accommodating the needs of other processes to some extent. However, the process of designing applications to be responsible users of CPU resources is more time-consuming than is designing applications that are not responsible, and is not generally done. In addition, as long as any one of the current processes or applications is not designed to be a responsible user of CPU resources, the original problem remains.
Several other methods have been tried in the past in attempts to address the issue of CPU sharing. In one such system, an administrator or other individual attempts to ensure proper simultaneous operation of multiple applications by manually setting a CPU usage level for each such application. However, this is time consuming and ineffective for a number of reasons. First, each application that supports this type of intervention exposes its own interface for setting CPU usage, and the administrator is required to access each such interface in order to set appropriate usage limitations. Secondly, this type of CPU usage allocation is static and does not accommodate changing conditions requiring a variation in CPU usage limits, such as, for example, when an application starts after the allocation is set. Another type of static CPU resource allocation is available in at least one operating system via a manual interface to the operating system “scheduler.”
Another system sometimes used to run multiple applications using a single CPU is simply to test several applications for compatibility. If a particular group of applications is able to run concurrently without any application getting excluded from CPU resources to the point of being inoperable, then that group of applications is run together. This system is inflexible in that only those applications already able to “play well together” can be reliably run together. Moreover, the particular mix of applications can only be supplemented or changed, if at all, after further testing.